'use strict';

const { Service } = require('egg');
const ModelName = 'Message'
class RouterService extends Service {
  /**
   * 根据分页和搜索条件获取
   * @param {Object} where 查询用户的条件
   * @param {Number} page 当前分页
   * @param {Number} pageSize 当前页每页多少条
   */
  async getPage(where, page, pageSize) {
    return this.ctx.model[ModelName].findAndCountAll({
      where,
      offset: pageSize * (page - 1),
      limit: pageSize,
      order:[
        ['create_time','DESC'],
        // id 降序
        ['user','DESC'],
        ['status', 'ASC'],
      ],
    });
  }

  // 所有列表
  async allList() {
    return this.ctx.model[ModelName].findAll({
      order:[
        // id 降序
        ['create_time','DESC']
      ],
    });
  }
  async findOne(id) {
    return this.ctx.model[ModelName].findOne({
      where: {
        id,
      },
    });
  }

  /**
   * 创建
   * @param {*} data 角色信息
   */
  async create(data) {
    const res = await this.ctx.model[ModelName].create(data);
    // 拿到回答
    const answer = data.answer
    function extractProductInfo(text) {
      const regex = /\[([^\]]+)\]\(([^)]+)\)/g;
      const matches = text.match(regex);

      if (matches) {
        const result = matches.map(match => {
          const [, productName, url] = /\[([^\]]+)\]\(([^)]+)\)/.exec(match);
          return { productName, url };
        });
        return result;
      }

      return [];
    }
    const products = extractProductInfo(answer);
    if (products.length > 0) {
      for (let i = 0; i < products.length; i++) {
        const product = products[i];
        await this.ctx.model.MessageProduct.create({
          message_id: data.message_id,
          user: data.user,
          query: data.query,
          answer: data.answer,
          product_name: product.productName,
          url: product.url,
        });
      }
    }
    return res
  }

  /**
   * 根据ID修改
   * @param {Number} id ID
   * @param {Object} data 要修改的信息
   */
  async update(id, data) {
    return await this.ctx.model[ModelName].update(data, { where: { id } });
  }

  /**
   * 根据id删除
   * @param {Number}
   */
  async deleteById(id) {
    return await this.ctx.model[ModelName].destroy({ where: { id } });
  }
}

module.exports = RouterService;
